"""
使用顺序表(数组), 选择尾插尾删, 效率更高
"""


class Stack(object):
    """栈"""
    def __init__(self, limit):
        self.__stack = []  # 定义一个列表用来存放元素
        self.limit = limit  # 定义栈的容量极限

    # 进栈
    def push(self, data):
        # 判断栈是否溢出
        if len(self.__stack) >= self.limit:
            raise IndexError("超出栈容量限制")
        self.__stack.append(data)

    # 出栈
    def pop(self):
        # 判断是否为空栈
        if self.__stack:
            return self.__stack.pop()
        else:
            raise IndexError("空栈不能弹出")

    # 查看栈顶的元素
    def peek(self):
        # 判断是否为空栈
        if self.__stack:
            return self.__stack[-1]

    # 是空栈吗?
    def is_empty(self):
        return self.__stack == []

    # 栈的大小
    def size(self):
        return len(self.__stack)

